package com.leyou.trade.service.impl;


import com.leyou.auth.utils.UserContext;
import com.leyou.trade.entity.CartItem;
import com.leyou.trade.repository.CartRepository;
import com.leyou.trade.service.CartService;
import org.apache.catalina.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import java.util.List;
import java.util.Optional;

/**
 * @author YYP
 * @date 2021/1/14
 */
@Service
public class CartServiceImpl implements CartService {

    @Autowired
    private CartRepository cartRepository;

    /**
     * 添加到购物车
     * @param cartItem 购物车商品
     */
    @Override
    public void saveCartItem(CartItem cartItem) {

        String id = generateId(cartItem.getSkuId());

        Optional<CartItem> optional = this.cartRepository.findById(id);

        if (optional.isPresent()){
            CartItem oldItem = optional.get();
            oldItem.setNum(cartItem.getNum()+oldItem.getNum());
            this.cartRepository.save(oldItem);
        }else {
            cartItem.setId(id);
            cartItem.setUserId(UserContext.getUser().getId());
            //前端传过来的没有userId和id
            this.cartRepository.save(cartItem);
        }
    }

    /**
     * 查看购物车
     * @return
     */
    @Override
    public List<CartItem> listCartItems() {

        //之能查询当前用户的
        return this.cartRepository.findByUserId(UserContext.getUser().getId());
    }

    /**
     * 生成联合主键id
     * @param skuId
     * @return
     */
    @Override
    public String generateId(Long skuId) {
        Long userId = UserContext.getUser().getId();
        //"u"+31+"s"+123456
        return String.format("u%ds%d",userId,skuId);
    }

    /**
     * 合并购物车
     * @param cartItems
     */
    @Override
    public void saveCartItemList(List<CartItem> cartItems) {
        for (CartItem cartItem : cartItems) {
            saveCartItem(cartItem);
        }
    }

    @Override
    public void deleteCartItem(Long skuId) {
        //mongodb中主键为id,所以根据主键删除
        this.cartRepository.deleteById(generateId(skuId));
    }


    /**
     * 更新购物车指定商品的数量
     * @param skuId 商品id
     * @param num 数量
     */
    @Override
    public void updateCartItem(Long skuId, Integer num) {
        String id = generateId(skuId);
        Optional<CartItem> optional = this.cartRepository.findById(id);
        CartItem cartItem = optional.get();
        cartItem.setNum(num);
        this.cartRepository.save(cartItem);
    }

}
